/**
 * 图片处理相关API服务
 * 包括图片压缩、格式转换、裁剪、水印等功能
 */
import api from './api';

const ImageService = {
  /**
   * 图片压缩
   * @param {FormData} formData - 包含图片文件和压缩参数的表单数据
   * @param {File} formData.file - 图片文件
   * @param {number} formData.quality - 压缩质量，范围1-100
   * @param {boolean} formData.resize - 是否调整大小
   * @param {number} formData.maxWidth - 如果resize为true，则设置最大宽度
   * @param {number} formData.maxHeight - 如果resize为true，则设置最大高度
   * @param {string} formData.format - 输出格式："original", "jpg", "png", "webp"
   * @return {Promise} 压缩结果Promise
   */
  compressImage: async (formData) => {
    return await api.post('/api/tools/image/compress', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  /**
   * 图片批量压缩
   * @param {FormData} formData - 包含多个图片文件和压缩参数的表单数据
   * @param {FileList} formData.files - 多个图片文件
   * @param {number} formData.quality - 压缩质量，范围1-100
   * @param {boolean} formData.resize - 是否调整大小
   * @param {number} formData.maxWidth - 如果resize为true，则设置最大宽度
   * @param {number} formData.maxHeight - 如果resize为true，则设置最大高度
   * @param {string} formData.format - 输出格式："original", "jpg", "png", "webp"
   * @return {Promise} 批量压缩结果Promise
   */
  batchCompressImages: async (formData) => {
    return await api.post('/api/tools/image/compress-batch', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  /**
   * 图片格式转换
   * @param {FormData} formData - 包含图片文件和转换参数的表单数据
   * @param {File} formData.file - 图片文件
   * @param {string} formData.format - 输出格式："jpg", "png", "webp", "gif"
   * @param {number} formData.quality - 质量，仅适用于jpg和webp，范围1-100
   * @return {Promise} 转换结果Promise
   */
  convertImageFormat: async (formData) => {
    return await api.post('/api/tools/image/convert', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  /**
   * 图片裁剪
   * @param {FormData} formData - 包含图片文件和裁剪参数的表单数据
   * @param {File} formData.file - 图片文件
   * @param {number} formData.x - 裁剪起始x坐标
   * @param {number} formData.y - 裁剪起始y坐标
   * @param {number} formData.width - 裁剪宽度
   * @param {number} formData.height - 裁剪高度
   * @param {string} formData.format - 输出格式："original", "jpg", "png", "webp"
   * @return {Promise} 裁剪结果Promise
   */
  cropImage: async (formData) => {
    return await api.post('/api/tools/image/crop', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  /**
   * 图片旋转和翻转
   * @param {FormData} formData - 包含图片文件和旋转翻转参数的表单数据
   * @param {File} formData.file - 图片文件
   * @param {number} formData.rotation - 旋转角度：0, 90, 180, 270
   * @param {boolean} formData.flipHorizontal - 是否水平翻转
   * @param {boolean} formData.flipVertical - 是否垂直翻转
   * @param {string} formData.format - 输出格式："original", "jpg", "png", "webp"
   * @return {Promise} 旋转翻转结果Promise
   */
  rotateImage: async (formData) => {
    return await api.post('/api/tools/image/rotate', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  /**
   * 添加水印
   * @param {FormData} formData - 包含图片文件和水印参数的表单数据
   * @param {File} formData.file - 图片文件
   * @param {string} formData.watermarkType - 水印类型："text" 或 "image"
   * @param {string} formData.watermarkText - 当watermarkType为text时的水印文字
   * @param {File} formData.watermarkImage - 当watermarkType为image时的水印图片
   * @param {string} formData.position - 水印位置："center", "topLeft", "topRight", "bottomLeft", "bottomRight"
   * @param {number} formData.opacity - 水印透明度：0.1-1.0
   * @param {number} formData.size - 水印大小，相对于原图的比例：0.1-1.0
   * @param {string} formData.format - 输出格式："original", "jpg", "png", "webp"
   * @return {Promise} 添加水印结果Promise
   */
  addWatermark: async (formData) => {
    return await api.post('/api/tools/image/watermark', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  }
};

export default ImageService; 